package telas;

import inicio.Inicio;

import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

/**
 * 
 * @author Douglas Borges
 * 
 */
@SuppressWarnings("serial")
public class TelaInicial extends JFrame {

  Dimension screenSize; // variavel para guardar as dimensões do monitor principal do usuario
  double largura; // variavel para guardar a largura do monitor
  double altura;// variavel para armazenar a altura do monitor.

  private JPanel pInicio;// Tela para criar os componetes dos usu. inicias como
  private JButton btUsuarioIni, btUsuarioFinal, btVeja1, btVeja2;// Botões de Comandoas para informações e chamadas de funções


  public TelaInicial() {
    super.setTitle("..::: GPUHelp - Aplicação para Execução Remota de Códigos nas Arquiteturas CUDA e OpenCL :::..");

    screenSize = this.getToolkit().getScreenSize();// Pega do sistema as dimensões do Monitor (Resoção 1024 X 768 )
    largura = screenSize.getWidth(); // Pega Largura do monitor (Resolução 1024)
    altura = screenSize.getHeight();// Pega Altura do monitor. (Resolução 768 )

    super.setLayout(null); // Inicializa O Frame

    desenhaTelaInicio();

    // Inicio configuração da Janela
    this.setSize(screenSize);
    super.setLocation(0, 0);
    super.setExtendedState(JFrame.MAXIMIZED_BOTH);
    super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    super.setVisible(true);
    // Fim configuração da Janela

  }


  /**
   * Insere os Componetes na Tela de Inicio
   */
  public void desenhaTelaInicio() {

    pInicio = new JPanel();// Inicializa a a Janela para acrescentar os componetes
    pInicio.setLayout(null); // Inicializa a sub Janela

    // Texto titulo da Tela
    JLabel texto = new JLabel("Bem vindo ao GPUHelp!!!");
    texto.setFont(new Font("Dialog", Font.BOLD, 30));
    texto.setBounds((int) (largura / 2 - 200), 10, 500, 50);
    pInicio.add(texto);

    // Texto titulo do botão usuario inicial
    texto = new JLabel("Usuários Iniciais em Programação Pararela em GPU!");
    texto.setFont(new Font("Dialog", Font.BOLD, 15));
    texto.setBounds(75, (int) (altura * 0.90 / 3) - 40, 500, 20);
    pInicio.add(texto);

    // Botão Usuario Inicial
    btUsuarioIni = new JButton("Usuário Inicial");
    btUsuarioIni.setName("usuarioini");
    btUsuarioIni.setBounds(50, (int) (altura * 0.90 / 3), 340, 80);
    btUsuarioIni.addActionListener(new ControleBotoes());
    pInicio.add(btUsuarioIni);

    // Texto de descrição ajuda usuario inicial
    texto = new JLabel("Sou usuário inicial?");
    texto.setFont(new Font("Dialog", Font.BOLD, 15));
    texto.setBounds(65, (int) (altura * 0.90 / 3) + 150, 200, 20);
    pInicio.add(texto);

    // Botão ajuda usuario inicial
    btVeja1 = new JButton("Veja Aqui!");
    btVeja1.setName("veja1");
    btVeja1.addActionListener(new ControleBotoes());
    btVeja1.setBounds(50, (int) (altura * 0.90 / 3) + 180, 200, 50);
    pInicio.add(btVeja1);

    texto = new JLabel("Usuários com Experiência em Programação Pararela em GPU!");
    texto.setFont(new Font("Dialog", Font.BOLD, 15));
    texto.setBounds((int) (largura * 0.87 - 450), (int) (altura * 0.90 / 3) - 55, 600, 50);
    pInicio.add(texto);

    btUsuarioFinal = new JButton("Usuário Experiente");
    btUsuarioFinal.setName("usuariofinal");
    btUsuarioFinal.setBounds((int) (largura * 0.89 - 450), (int) (altura * 0.90 / 3), 340, 80);
    btUsuarioFinal.addActionListener(new ControleBotoes());
    pInicio.add(btUsuarioFinal);

    texto = new JLabel("Sou usuário experiente?");
    texto.setFont(new Font("Dialog", Font.BOLD, 15));
    texto.setBounds((int) (largura * 0.90 - 440), (int) (altura * 0.90 / 3) + 150, 300, 20);

    btVeja2 = new JButton("Veja Aqui!");
    btVeja2.setName("veja2");
    btVeja2.setBounds((int) ((largura * 0.90) - 450), (int) (altura * 0.90 / 3) + 180, 200, 50);
    btVeja2.addActionListener(new ControleBotoes());
    pInicio.add(btVeja2);

    pInicio.add(texto);
    pInicio.setBounds(20, 0, (int) (largura * 0.90), (int) (altura * 0.90));
    super.add(pInicio);

  }

  /**
   * 
   *  Classe para direcionar e executar as ações dos botões
   * 
   */
  private class ControleBotoes implements ActionListener {
    public void actionPerformed(ActionEvent evento) {

      String bt = (((JButton) ((Object) evento.getSource())).getName());

      if (bt.equals("veja1")) { // Explicação para Usuario Inicial
        JOptionPane.showMessageDialog(null, " ..:: Usuário Inicial ::.. \n \n Você já escreveu programas para as arquiteturas CUDA e OpenCL? \n \n Neste trabalho, considera-se usuário inicial aquele utilizador que não \n possui experiência no desenvolvimento de códigos nas arquiteturas \n CUDA e OpenCL. \n \nDessa forma, essa interface da aplicação tem o objetivo de demonstrar \n códigos escritos para as arquiteturas citadas anteriormente através de \n exemplos práticos. \n \n O usuário poderá escolher qual arquitetura (CUDA ou OpenCL) e qual \n exemplo irá executar. Desse modo, o objetivo desta aplicação é introduzir \n os conceitos de Programação Paralela em GPU através de exemplos \n práticos aos utilizadores.");

      }
      if (bt.equals("veja2")) { // Explicação para Usuario Experiente
        JOptionPane.showMessageDialog(null, " ..:: Usuário Experiente ::.. \n \n Você é um desenvolvedor de códigos para as arquiteturas CUDA e OpenCL? \n \n Neste trabalho, considera-se usuário experiente aquele utilizador que \n possui alguma experiência em Programação Paralela em arquiteturas de \n GPU, seja em CUDA, OpenCL ou em ambas. \n \n Nesta interface, o usuário poderá testar seus próprios códigos, \n desenvolvidos em sua máquina local, em um ambiente servidor. \n \n O usuário deverá selecionar todos os arquivos relacionados a \n aplicação que esta desenvolvendo, para então enviar ao servidor.");

      }
      if (bt.equals("usuarioini")) {
        // O Paramentro enviado 1 = Iniciante 2 = Experiente
        new Inicio(1);
        dispose();
      }
      if (bt.equals("usuariofinal")) {
        // O Paramentro enviado 1 = Iniciante 2 = Experiente
        new Inicio(2);
        dispose();

      }
    }
  }

}
